{admiral}{admiral}https://www.cdisc.org/standards/foundational/adam/adamig-non-compartmental-analysis-input-data-v1-0
Example PK Curve with Parameters
PC and Dosing Records EX| Variable | Variable Label |
|---|---|
| NFRLT | Nom. Rel. Time from Analyte First Dose |
| AFRLT | Act. Rel. Time from Analyte First Dose |
| NRRLT | Nominal Rel. Time from Ref. Dose |
| ARRLT | Actual Rel. Time from Ref. Dose |
| MRRLT | Modified Rel. Time from Ref. Dose |
{admiral}https://github.com/pharmaverse/admiral
{admiral}ADaM in R Asset Library{admiral} is Open Source and Collaborative{admiral} is Modular{admiral} is Part of Pharmaverse{admiral} is part of Pharmaversehttps://github.com/pharmaverse
{admiral} LibrariesPC Rawdata# A tibble: 14 × 6
USUBJID PCTEST PCDTC VISIT PCTPT PCSTRESN
<chr> <chr> <chr> <chr> <chr> <dbl>
1 01-701-1028 XANOMELINE 2013-07-18T23:30:00 BASELINE Pre-dose 0
2 01-701-1028 XANOMELINE 2013-07-19T00:05:00 BASELINE 5 Min Post-dose 0.0957
3 01-701-1028 XANOMELINE 2013-07-19T00:30:00 BASELINE 30 Min Post-dose 0.522
4 01-701-1028 XANOMELINE 2013-07-19T01:00:00 BASELINE 1h Post-dose 0.895
5 01-701-1028 XANOMELINE 2013-07-19T01:30:00 BASELINE 1.5h Post-dose 1.16
6 01-701-1028 XANOMELINE 2013-07-19T02:00:00 BASELINE 2h Post-dose 1.35
7 01-701-1028 XANOMELINE 2013-07-19T04:00:00 BASELINE 4h Post-dose 1.71
8 01-701-1028 XANOMELINE 2013-07-19T06:00:00 BASELINE 6h Post-dose 1.80
9 01-701-1028 XANOMELINE 2013-07-19T08:00:00 BASELINE 8h Post-dose 1.82
10 01-701-1028 XANOMELINE 2013-07-19T12:00:00 BASELINE 12h Post-dose 0.571
11 01-701-1028 XANOMELINE 2013-07-19T16:00:00 BASELINE 16h Post-dose 0.178
12 01-701-1028 XANOMELINE 2013-07-20T00:00:00 BASELINE 24h Post-dose 0.0173
13 01-701-1028 XANOMELINE 2013-07-20T12:00:00 BASELINE 36h Post-dose NA
14 01-701-1028 XANOMELINE 2013-07-21T00:00:00 BASELINE 48h Post-dose NA
ADSL with PCderive_vars_merged()derive_vars_dtm()
derive_vars_dtm_to_dt()
derive_vars_dtm_to_tm()
derive_vars_dy()
NFRLT for PC data based on PCTPTNUMPC Merge Codeadsl_vars <- exprs(TRTSDT, TRTSDTM, TRT01P, TRT01A)
adpc <- pc %>%
# Join ADSL with PC (need TRTSDT for ADY derivation)
derive_vars_merged(
dataset_add = adsl,
new_vars = adsl_vars,
by_vars = exprs(STUDYID, USUBJID)
) %>%
# Calculate ADTM, ADT, ADY
derive_vars_dtm(
new_vars_prefix = "A",
dtc = PCDTC,
time_imputation = "00:00:00"
) %>%
# Derive dates and times from date/times
derive_vars_dtm_to_dt(exprs(ADTM)) %>%
derive_vars_dtm_to_tm(exprs(ADTM)) %>%
derive_vars_dy(reference_date = TRTSDT, source_vars = exprs(ADT)) %>%
# Derive event ID and nominal relative time from first dose (NFRLT)
mutate(
EVID = 0,
DRUG = PCTEST,
NFRLT = if_else(PCTPTNUM < 0, 0, PCTPTNUM), .after = USUBJID
)PC Merge Code Output# A tibble: 14 × 6
USUBJID PCTEST ADTM VISIT PCTPT NFRLT
<chr> <chr> <dttm> <chr> <chr> <dbl>
1 01-701-1028 XANOMELINE 2013-07-18 23:30:00 BASELINE Pre-dose 0
2 01-701-1028 XANOMELINE 2013-07-19 00:05:00 BASELINE 5 Min Post-dose 0.08
3 01-701-1028 XANOMELINE 2013-07-19 00:30:00 BASELINE 30 Min Post-dose 0.5
4 01-701-1028 XANOMELINE 2013-07-19 01:00:00 BASELINE 1h Post-dose 1
5 01-701-1028 XANOMELINE 2013-07-19 01:30:00 BASELINE 1.5h Post-dose 1.5
6 01-701-1028 XANOMELINE 2013-07-19 02:00:00 BASELINE 2h Post-dose 2
7 01-701-1028 XANOMELINE 2013-07-19 04:00:00 BASELINE 4h Post-dose 4
8 01-701-1028 XANOMELINE 2013-07-19 06:00:00 BASELINE 6h Post-dose 6
9 01-701-1028 XANOMELINE 2013-07-19 08:00:00 BASELINE 8h Post-dose 8
10 01-701-1028 XANOMELINE 2013-07-19 12:00:00 BASELINE 12h Post-dose 12
11 01-701-1028 XANOMELINE 2013-07-19 16:00:00 BASELINE 16h Post-dose 16
12 01-701-1028 XANOMELINE 2013-07-20 00:00:00 BASELINE 24h Post-dose 24
13 01-701-1028 XANOMELINE 2013-07-20 12:00:00 BASELINE 36h Post-dose 36
14 01-701-1028 XANOMELINE 2013-07-21 00:00:00 BASELINE 48h Post-dose 48
EX Rawdata# A tibble: 3 × 7
USUBJID EXTRT EXDOSFRQ EXSTDTC EXENDTC VISIT VISITDY
<chr> <chr> <chr> <chr> <chr> <chr> <dbl>
1 01-701-1028 XANOMELINE QD 2013-07-19 2013-08-01 BASELINE 1
2 01-701-1028 XANOMELINE QD 2013-08-02 2014-01-06 WEEK 2 14
3 01-701-1028 XANOMELINE QD 2014-01-07 2014-01-14 WEEK 24 168
ADSL with EXderive_vars_merged()derive_vars_dtm()
derive_vars_dtm_to_dt()
NFRLT based on VISITDYEX Merge Code# ---- Get dosing information ----
ex <- ex %>%
derive_vars_merged(
dataset_add = adsl,
new_vars = adsl_vars,
by_vars = exprs(STUDYID, USUBJID)
) %>%
# Keep records with nonzero dose
filter(EXDOSE > 0) %>%
# Add time and set missing end date to start date
# Impute missing time to 00:00:00
# Derive Analysis Start and End Dates
derive_vars_dtm(
new_vars_prefix = "AST",
dtc = EXSTDTC,
time_imputation = "00:00:00"
) %>%
derive_vars_dtm(
new_vars_prefix = "AEN",
dtc = EXENDTC,
time_imputation = "00:00:00"
) %>%
# Derive event ID and nominal relative time from first dose (NFRLT)
mutate(
EVID = 1,
NFRLT = 24 * (VISITDY - 1), .after = USUBJID
) %>%
# Set missing end dates to start date
mutate(AENDTM = case_when(
is.na(AENDTM) ~ ASTDTM,
TRUE ~ AENDTM
)) %>%
# Derive dates from date/times
derive_vars_dtm_to_dt(exprs(ASTDTM)) %>%
derive_vars_dtm_to_dt(exprs(AENDTM))EX Merge Output# A tibble: 3 × 7
USUBJID EXTRT EXDOSFRQ ASTDT AENDT VISITDY NFRLT
<chr> <chr> <chr> <date> <date> <dbl> <dbl>
1 01-701-1028 XANOMELINE QD 2013-07-19 2013-08-01 1 0
2 01-701-1028 XANOMELINE QD 2013-08-02 2014-01-06 14 312
3 01-701-1028 XANOMELINE QD 2014-01-07 2014-01-14 168 4008
create_single_dose_dataset()NFRLTEXDOSFRQ = “QD” will expand NFRLT by 24 hours# ---- Expand dosing records between start and end dates ----
ex_exp <- ex %>%
create_single_dose_dataset(
dose_freq = EXDOSFRQ,
start_date = ASTDT,
start_datetime = ASTDTM,
end_date = AENDT,
end_datetime = AENDTM,
nominal_time = NFRLT,
lookup_table = dose_freq_lookup,
lookup_column = CDISC_VALUE,
keep_source_vars = exprs(
STUDYID, USUBJID, EVID, EXDOSFRQ, EXDOSFRM,
NFRLT, EXDOSE, EXTRT, ASTDT, ASTDTM, AENDT, AENDTM,
VISIT, VISITNUM, VISITDY,
TRT01A, TRT01P, DOMAIN, EXSEQ, !!!adsl_vars
)
) %>%
# Derive AVISIT based on nominal relative time
mutate(
AVISITN = NFRLT %/% 24 + 1,
AVISIT = paste("Day", AVISITN),
ADTM = ASTDTM,
DRUG = EXTRT,
) %>%
# Derive dates and times from datetimes
derive_vars_dtm_to_dt(exprs(ADTM)) %>%
derive_vars_dtm_to_tm(exprs(ADTM)) %>%
derive_vars_dtm_to_tm(exprs(ASTDTM)) %>%
derive_vars_dtm_to_tm(exprs(AENDTM)) %>%
derive_vars_dy(reference_date = TRTSDT, source_vars = exprs(ADT))# A tibble: 20 × 7
USUBJID DRUG EXDOS…¹ ASTDTM AENDTM AVISIT NFRLT
<chr> <chr> <chr> <dttm> <dttm> <chr> <dbl>
1 01-701-10… XANO… ONCE 2013-07-19 00:00:00 2013-07-19 00:00:00 Day 1 0
2 01-701-10… XANO… ONCE 2013-07-20 00:00:00 2013-07-20 00:00:00 Day 2 24
3 01-701-10… XANO… ONCE 2013-07-21 00:00:00 2013-07-21 00:00:00 Day 3 48
4 01-701-10… XANO… ONCE 2013-07-22 00:00:00 2013-07-22 00:00:00 Day 4 72
5 01-701-10… XANO… ONCE 2013-07-23 00:00:00 2013-07-23 00:00:00 Day 5 96
6 01-701-10… XANO… ONCE 2013-07-24 00:00:00 2013-07-24 00:00:00 Day 6 120
7 01-701-10… XANO… ONCE 2013-07-25 00:00:00 2013-07-25 00:00:00 Day 7 144
8 01-701-10… XANO… ONCE 2013-07-26 00:00:00 2013-07-26 00:00:00 Day 8 168
9 01-701-10… XANO… ONCE 2013-07-27 00:00:00 2013-07-27 00:00:00 Day 9 192
10 01-701-10… XANO… ONCE 2013-07-28 00:00:00 2013-07-28 00:00:00 Day 10 216
11 01-701-10… XANO… ONCE 2013-07-29 00:00:00 2013-07-29 00:00:00 Day 11 240
12 01-701-10… XANO… ONCE 2013-07-30 00:00:00 2013-07-30 00:00:00 Day 12 264
13 01-701-10… XANO… ONCE 2013-07-31 00:00:00 2013-07-31 00:00:00 Day 13 288
14 01-701-10… XANO… ONCE 2013-08-01 00:00:00 2013-08-01 00:00:00 Day 14 312
15 01-701-10… XANO… ONCE 2013-08-02 00:00:00 2013-08-02 00:00:00 Day 14 312
16 01-701-10… XANO… ONCE 2013-08-03 00:00:00 2013-08-03 00:00:00 Day 15 336
17 01-701-10… XANO… ONCE 2013-08-04 00:00:00 2013-08-04 00:00:00 Day 16 360
18 01-701-10… XANO… ONCE 2013-08-05 00:00:00 2013-08-05 00:00:00 Day 17 384
19 01-701-10… XANO… ONCE 2013-08-06 00:00:00 2013-08-06 00:00:00 Day 18 408
20 01-701-10… XANO… ONCE 2013-08-07 00:00:00 2013-08-07 00:00:00 Day 19 432
# … with abbreviated variable name ¹EXDOSFRQ
FANLDTMderive_vars_merged()new_vars used to derive FANLDTMAVISIT and AVISITN based on NFRLT for this study# ---- Find first dose per treatment per subject ----
# ---- Join with ADPC data and keep only subjects with dosing ----
adpc <- adpc %>%
derive_vars_merged(
dataset_add = ex_exp,
filter_add = (EXDOSE > 0 & !is.na(ADTM)),
new_vars = exprs(FANLDTM = ADTM),
order = exprs(ADTM, EXSEQ),
mode = "first",
by_vars = exprs(STUDYID, USUBJID, DRUG)
) %>%
filter(!is.na(FANLDTM)) %>%
# Derive AVISIT from nominal relative time
mutate(
AVISITN = NFRLT %/% 24 + 1,
AVISIT = paste("Day", AVISITN),
)# A tibble: 14 × 5
USUBJID FANLDTM AVISIT ADTM PCTPT
<chr> <dttm> <chr> <dttm> <chr>
1 01-701-1028 2013-07-19 00:00:00 Day 1 2013-07-18 23:30:00 Pre-dose
2 01-701-1028 2013-07-19 00:00:00 Day 1 2013-07-19 00:05:00 5 Min Post-dose
3 01-701-1028 2013-07-19 00:00:00 Day 1 2013-07-19 00:30:00 30 Min Post-dose
4 01-701-1028 2013-07-19 00:00:00 Day 1 2013-07-19 01:00:00 1h Post-dose
5 01-701-1028 2013-07-19 00:00:00 Day 1 2013-07-19 01:30:00 1.5h Post-dose
6 01-701-1028 2013-07-19 00:00:00 Day 1 2013-07-19 02:00:00 2h Post-dose
7 01-701-1028 2013-07-19 00:00:00 Day 1 2013-07-19 04:00:00 4h Post-dose
8 01-701-1028 2013-07-19 00:00:00 Day 1 2013-07-19 06:00:00 6h Post-dose
9 01-701-1028 2013-07-19 00:00:00 Day 1 2013-07-19 08:00:00 8h Post-dose
10 01-701-1028 2013-07-19 00:00:00 Day 1 2013-07-19 12:00:00 12h Post-dose
11 01-701-1028 2013-07-19 00:00:00 Day 1 2013-07-19 16:00:00 16h Post-dose
12 01-701-1028 2013-07-19 00:00:00 Day 2 2013-07-20 00:00:00 24h Post-dose
13 01-701-1028 2013-07-19 00:00:00 Day 2 2013-07-20 12:00:00 36h Post-dose
14 01-701-1028 2013-07-19 00:00:00 Day 3 2013-07-21 00:00:00 48h Post-dose
derive_vars_joined()filter_join used to set condition# ---- Find previous dose ----
# Use derive_vars_joined() for consistency with other variables
# This is equivalent to derive_vars_last_dose() in this case
adpc <- adpc %>%
derive_vars_joined(
dataset_add = ex_exp,
by_vars = exprs(USUBJID),
order = exprs(ADTM),
new_vars = exprs(
ADTM_prev = ADTM, EXDOSE_prev = EXDOSE, AVISIT_prev = AVISIT,
AENDTM_prev = AENDTM
),
join_vars = exprs(ADTM),
filter_add = NULL,
filter_join = ADTM > ADTM.join,
mode = "last",
check_type = "none"
)# A tibble: 14 × 7
USUBJID VISIT ADTM PCTPT ADTM_prev EXDOS…¹ AVISI…²
<chr> <chr> <dttm> <chr> <dttm> <dbl> <chr>
1 01-701-1… BASE… 2013-07-18 23:30:00 Pre-… NA NA <NA>
2 01-701-1… BASE… 2013-07-19 00:05:00 5 Mi… 2013-07-19 00:00:00 54 Day 1
3 01-701-1… BASE… 2013-07-19 00:30:00 30 M… 2013-07-19 00:00:00 54 Day 1
4 01-701-1… BASE… 2013-07-19 01:00:00 1h P… 2013-07-19 00:00:00 54 Day 1
5 01-701-1… BASE… 2013-07-19 01:30:00 1.5h… 2013-07-19 00:00:00 54 Day 1
6 01-701-1… BASE… 2013-07-19 02:00:00 2h P… 2013-07-19 00:00:00 54 Day 1
7 01-701-1… BASE… 2013-07-19 04:00:00 4h P… 2013-07-19 00:00:00 54 Day 1
8 01-701-1… BASE… 2013-07-19 06:00:00 6h P… 2013-07-19 00:00:00 54 Day 1
9 01-701-1… BASE… 2013-07-19 08:00:00 8h P… 2013-07-19 00:00:00 54 Day 1
10 01-701-1… BASE… 2013-07-19 12:00:00 12h … 2013-07-19 00:00:00 54 Day 1
11 01-701-1… BASE… 2013-07-19 16:00:00 16h … 2013-07-19 00:00:00 54 Day 1
12 01-701-1… BASE… 2013-07-20 00:00:00 24h … 2013-07-19 00:00:00 54 Day 1
13 01-701-1… BASE… 2013-07-20 12:00:00 36h … 2013-07-20 00:00:00 54 Day 2
14 01-701-1… BASE… 2013-07-21 00:00:00 48h … 2013-07-20 00:00:00 54 Day 2
# … with abbreviated variable names ¹EXDOSE_prev, ²AVISIT_prev
# ---- Find next dose ----
adpc <- adpc %>%
derive_vars_joined(
dataset_add = ex_exp,
by_vars = exprs(USUBJID),
order = exprs(ADTM),
new_vars = exprs(
ADTM_next = ADTM, EXDOSE_next = EXDOSE, AVISIT_next = AVISIT,
AENDTM_next = AENDTM
),
join_vars = exprs(ADTM),
filter_add = NULL,
filter_join = ADTM <= ADTM.join,
mode = "first",
check_type = "none"
)# A tibble: 14 × 7
USUBJID VISIT ADTM PCTPT ADTM_next EXDOS…¹ AVISI…²
<chr> <chr> <dttm> <chr> <dttm> <dbl> <chr>
1 01-701-1… BASE… 2013-07-18 23:30:00 Pre-… 2013-07-19 00:00:00 54 Day 1
2 01-701-1… BASE… 2013-07-19 00:05:00 5 Mi… 2013-07-20 00:00:00 54 Day 2
3 01-701-1… BASE… 2013-07-19 00:30:00 30 M… 2013-07-20 00:00:00 54 Day 2
4 01-701-1… BASE… 2013-07-19 01:00:00 1h P… 2013-07-20 00:00:00 54 Day 2
5 01-701-1… BASE… 2013-07-19 01:30:00 1.5h… 2013-07-20 00:00:00 54 Day 2
6 01-701-1… BASE… 2013-07-19 02:00:00 2h P… 2013-07-20 00:00:00 54 Day 2
7 01-701-1… BASE… 2013-07-19 04:00:00 4h P… 2013-07-20 00:00:00 54 Day 2
8 01-701-1… BASE… 2013-07-19 06:00:00 6h P… 2013-07-20 00:00:00 54 Day 2
9 01-701-1… BASE… 2013-07-19 08:00:00 8h P… 2013-07-20 00:00:00 54 Day 2
10 01-701-1… BASE… 2013-07-19 12:00:00 12h … 2013-07-20 00:00:00 54 Day 2
11 01-701-1… BASE… 2013-07-19 16:00:00 16h … 2013-07-20 00:00:00 54 Day 2
12 01-701-1… BASE… 2013-07-20 00:00:00 24h … 2013-07-20 00:00:00 54 Day 2
13 01-701-1… BASE… 2013-07-20 12:00:00 36h … 2013-07-21 00:00:00 54 Day 3
14 01-701-1… BASE… 2013-07-21 00:00:00 48h … 2013-07-21 00:00:00 54 Day 3
# … with abbreviated variable names ¹EXDOSE_next, ²AVISIT_next
# A tibble: 14 × 5
USUBJID NFRLT PCTPT NFRLT_prev NFRLT_next
<chr> <dbl> <chr> <dbl> <dbl>
1 01-701-1028 0 Pre-dose NA 0
2 01-701-1028 0.08 5 Min Post-dose 0 24
3 01-701-1028 0.5 30 Min Post-dose 0 24
4 01-701-1028 1 1h Post-dose 0 24
5 01-701-1028 1.5 1.5h Post-dose 0 24
6 01-701-1028 2 2h Post-dose 0 24
7 01-701-1028 4 4h Post-dose 0 24
8 01-701-1028 6 6h Post-dose 0 24
9 01-701-1028 8 8h Post-dose 0 24
10 01-701-1028 12 12h Post-dose 0 24
11 01-701-1028 16 16h Post-dose 0 24
12 01-701-1028 24 24h Post-dose 0 24
13 01-701-1028 36 36h Post-dose 24 48
14 01-701-1028 48 48h Post-dose 24 48
derive_vars_duration()AFRLT# ---- Combine ADPC and EX data ----
# Derive Relative Time Variables
adpc <- bind_rows(adpc, ex_exp) %>%
group_by(USUBJID, DRUG) %>%
mutate(
FANLDTM = min(FANLDTM, na.rm = TRUE),
min_NFRLT = min(NFRLT_prev, na.rm = TRUE),
maxdate = max(ADT[EVID == 0], na.rm = TRUE), .after = USUBJID
) %>%
arrange(USUBJID, ADTM) %>%
ungroup() %>%
filter(ADT <= maxdate) %>%
# Derive Actual Relative Time from First Dose (AFRLT)
derive_vars_duration(
new_var = AFRLT,
start_date = FANLDTM,
end_date = ADTM,
out_unit = "hours",
floor_in = FALSE,
add_one = FALSE
) %>%
# Derive Actual Relative Time from Reference Dose (ARRLT)
derive_vars_duration(
new_var = ARRLT,
start_date = ADTM_prev,
end_date = ADTM,
out_unit = "hours",
floor_in = FALSE,
add_one = FALSE
) %>%
# Derive Actual Relative Time from Next Dose (AXRLT not kept)
derive_vars_duration(
new_var = AXRLT,
start_date = ADTM_next,
end_date = ADTM,
out_unit = "hours",
floor_in = FALSE,
add_one = FALSE
) %>%
mutate(
ARRLT = case_when(
EVID == 1 ~ 0,
is.na(ARRLT) ~ AXRLT,
TRUE ~ ARRLT
),
# Derive Reference Dose Date
PCRFTDTM = case_when(
EVID == 1 ~ ADTM,
is.na(ADTM_prev) ~ ADTM_next,
TRUE ~ ADTM_prev
)
) %>%
# Derive dates and times from datetimes
derive_vars_dtm_to_dt(exprs(FANLDTM)) %>%
derive_vars_dtm_to_tm(exprs(FANLDTM)) %>%
derive_vars_dtm_to_dt(exprs(PCRFTDTM)) %>%
derive_vars_dtm_to_tm(exprs(PCRFTDTM))# A tibble: 17 × 7
USUBJID FANLDTM AVISIT PCTPT AFRLT ARRLT AXRLT
<chr> <dttm> <chr> <chr> <dbl> <dbl> <dbl>
1 01-701-1028 2013-07-19 00:00:00 Day 1 Pre-dose -0.5 -0.5 -0.5
2 01-701-1028 2013-07-19 00:00:00 Day 1 <NA> 0 0 NA
3 01-701-1028 2013-07-19 00:00:00 Day 1 5 Min Post-dose 0.0833 0.0833 -23.9
4 01-701-1028 2013-07-19 00:00:00 Day 1 30 Min Post-dose 0.5 0.5 -23.5
5 01-701-1028 2013-07-19 00:00:00 Day 1 1h Post-dose 1 1 -23
6 01-701-1028 2013-07-19 00:00:00 Day 1 1.5h Post-dose 1.5 1.5 -22.5
7 01-701-1028 2013-07-19 00:00:00 Day 1 2h Post-dose 2 2 -22
8 01-701-1028 2013-07-19 00:00:00 Day 1 4h Post-dose 4 4 -20
9 01-701-1028 2013-07-19 00:00:00 Day 1 6h Post-dose 6 6 -18
10 01-701-1028 2013-07-19 00:00:00 Day 1 8h Post-dose 8 8 -16
11 01-701-1028 2013-07-19 00:00:00 Day 1 12h Post-dose 12 12 -12
12 01-701-1028 2013-07-19 00:00:00 Day 1 16h Post-dose 16 16 -8
13 01-701-1028 2013-07-19 00:00:00 Day 2 24h Post-dose 24 24 0
14 01-701-1028 2013-07-19 00:00:00 Day 2 <NA> 24 0 NA
15 01-701-1028 2013-07-19 00:00:00 Day 2 36h Post-dose 36 12 -12
16 01-701-1028 2013-07-19 00:00:00 Day 3 48h Post-dose 48 24 0
17 01-701-1028 2013-07-19 00:00:00 Day 3 <NA> 48 0 NA
# A tibble: 17 × 6
USUBJID AVISIT PCTPT NFRLT NRRLT NXRLT
<chr> <chr> <chr> <dbl> <dbl> <dbl>
1 01-701-1028 Day 1 Pre-dose 0 0 0
2 01-701-1028 Day 1 <NA> 0 0 0
3 01-701-1028 Day 1 5 Min Post-dose 0.08 0.08 -23.9
4 01-701-1028 Day 1 30 Min Post-dose 0.5 0.5 -23.5
5 01-701-1028 Day 1 1h Post-dose 1 1 -23
6 01-701-1028 Day 1 1.5h Post-dose 1.5 1.5 -22.5
7 01-701-1028 Day 1 2h Post-dose 2 2 -22
8 01-701-1028 Day 1 4h Post-dose 4 4 -20
9 01-701-1028 Day 1 6h Post-dose 6 6 -18
10 01-701-1028 Day 1 8h Post-dose 8 8 -16
11 01-701-1028 Day 1 12h Post-dose 12 12 -12
12 01-701-1028 Day 1 16h Post-dose 16 16 -8
13 01-701-1028 Day 2 24h Post-dose 24 24 0
14 01-701-1028 Day 2 <NA> 24 0 0
15 01-701-1028 Day 2 36h Post-dose 36 12 -12
16 01-701-1028 Day 3 48h Post-dose 48 24 0
17 01-701-1028 Day 3 <NA> 48 0 0
adpc <- adpc %>%
mutate(
ATPTN = case_when(
EVID == 1 ~ 0,
TRUE ~ PCTPTNUM
),
ATPT = case_when(
EVID == 1 ~ "Dose",
TRUE ~ PCTPT
),
ATPTREF = case_when(
EVID == 1 ~ AVISIT,
is.na(AVISIT_prev) ~ AVISIT_next,
TRUE ~ AVISIT_prev
),
# Derive baseline flag for pre-dose records
ABLFL = case_when(
ATPT == "Pre-dose" ~ "Y",
TRUE ~ NA_character_
),
# Derive BASETYPE
BASETYPE = paste(ATPTREF, "Baseline"),
# Derive Actual Dose
DOSEA = case_when(
EVID == 1 ~ EXDOSE,
is.na(EXDOSE_prev) ~ EXDOSE_next,
TRUE ~ EXDOSE_next
),
# Derive Planned Dose
DOSEP = case_when(
TRT01P == "Xanomeline High Dose" ~ 81,
TRT01P == "Xanomeline Low Dose" ~ 54
),
DOSEU = "mg",
) %>%
mutate(
RFLTU = "h",
RRLTU = "h",
PARAMCD = coalesce(PCTESTCD, "DOSE"),
ALLOQ = PCLLOQ,
AVAL = case_when(
EVID == 1 ~ EXDOSE,
PCSTRESC == "<BLQ" & NFRLT == 0 ~ 0,
PCSTRESC == "<BLQ" & NFRLT > 0 ~ 0.5 * ALLOQ,
TRUE ~ PCSTRESN
),
AVALC = case_when(
EVID == 1 ~ paste(EXDOSE),
TRUE ~ PCSTRESC
),
AVALCAT1 = if_else(PCSTRESC == "<BLQ", PCSTRESC, prettyNum(signif(AVAL, digits = 3))),
) %>%
# Add SRCSEQ
mutate(
SRCDOM = DOMAIN,
SRCVAR = "SEQ",
SRCSEQ = coalesce(PCSEQ, EXSEQ)
)# A tibble: 17 × 8
USUBJID NFRLT AVISIT ATPT ABLFL ATPTREF AVAL AVALCAT1
<chr> <dbl> <chr> <chr> <chr> <chr> <dbl> <chr>
1 01-701-1028 0 Day 1 Pre-dose Y Day 1 0 <BLQ
2 01-701-1028 0 Day 1 Dose <NA> Day 1 54 <NA>
3 01-701-1028 0.08 Day 1 5 Min Post-dose <NA> Day 1 0.0957 0.0957
4 01-701-1028 0.5 Day 1 30 Min Post-dose <NA> Day 1 0.522 0.522
5 01-701-1028 1 Day 1 1h Post-dose <NA> Day 1 0.895 0.895
6 01-701-1028 1.5 Day 1 1.5h Post-dose <NA> Day 1 1.16 1.16
7 01-701-1028 2 Day 1 2h Post-dose <NA> Day 1 1.35 1.35
8 01-701-1028 4 Day 1 4h Post-dose <NA> Day 1 1.71 1.71
9 01-701-1028 6 Day 1 6h Post-dose <NA> Day 1 1.80 1.8
10 01-701-1028 8 Day 1 8h Post-dose <NA> Day 1 1.82 1.82
11 01-701-1028 12 Day 1 12h Post-dose <NA> Day 1 0.571 0.571
12 01-701-1028 16 Day 1 16h Post-dose <NA> Day 1 0.178 0.178
13 01-701-1028 24 Day 2 24h Post-dose <NA> Day 1 0.0173 0.0173
14 01-701-1028 24 Day 2 Dose <NA> Day 2 54 <NA>
15 01-701-1028 36 Day 2 36h Post-dose <NA> Day 2 0.005 <BLQ
16 01-701-1028 48 Day 3 48h Post-dose <NA> Day 2 0.005 <BLQ
17 01-701-1028 48 Day 3 Dose <NA> Day 3 54 <NA>
DTYPE = “COPY” RecordsPCSEQ is retainedABLFL is set to “Y”# ---- Create DTYPE copy records ----
dtype <- adpc %>%
filter(NFRLT > 0 & NXRLT == 0 & EVID == 0 & !is.na(AVISIT_next)) %>%
select(-PCRFTDT, -PCRFTTM) %>%
# Re-derive variables in for DTYPE copy records
mutate(
ABLFL = NA_character_,
ATPTREF = AVISIT_next,
ARRLT = AXRLT,
NRRLT = NXRLT,
PCRFTDTM = ADTM_next,
DOSEA = EXDOSE_next,
BASETYPE = paste(AVISIT_next, "Baseline"),
ATPT = "Pre-dose",
ATPTN = NFRLT,
ABLFL = "Y",
DTYPE = "COPY"
) %>%
derive_vars_dtm_to_dt(exprs(PCRFTDTM)) %>%
derive_vars_dtm_to_tm(exprs(PCRFTDTM))# A tibble: 2 × 8
USUBJID DTYPE ATPT NFRLT NRRLT AFRLT ARRLT BASETYPE
<chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <chr>
1 01-701-1028 COPY Pre-dose 24 0 24 0 Day 2 Baseline
2 01-701-1028 COPY Pre-dose 48 0 48 0 Day 3 Baseline
ADPC data with Duplicated RecordsADPC Output# A tibble: 19 × 9
STUDYID USUBJID BASET…¹ ADTM ATPT NFRLT NRRLT ARRLT MRRLT
<chr> <chr> <chr> <dttm> <chr> <dbl> <dbl> <dbl> <dbl>
1 CDISCP… 01-701… Day 1 … 2013-07-18 23:30:00 Pre-… 0 0 -0.5 0
2 CDISCP… 01-701… Day 1 … 2013-07-19 00:00:00 Dose 0 0 0 0
3 CDISCP… 01-701… Day 1 … 2013-07-19 00:05:00 5 Mi… 0.08 0.08 0.0833 0.0833
4 CDISCP… 01-701… Day 1 … 2013-07-19 00:30:00 30 M… 0.5 0.5 0.5 0.5
5 CDISCP… 01-701… Day 1 … 2013-07-19 01:00:00 1h P… 1 1 1 1
6 CDISCP… 01-701… Day 1 … 2013-07-19 01:30:00 1.5h… 1.5 1.5 1.5 1.5
7 CDISCP… 01-701… Day 1 … 2013-07-19 02:00:00 2h P… 2 2 2 2
8 CDISCP… 01-701… Day 1 … 2013-07-19 04:00:00 4h P… 4 4 4 4
9 CDISCP… 01-701… Day 1 … 2013-07-19 06:00:00 6h P… 6 6 6 6
10 CDISCP… 01-701… Day 1 … 2013-07-19 08:00:00 8h P… 8 8 8 8
11 CDISCP… 01-701… Day 1 … 2013-07-19 12:00:00 12h … 12 12 12 12
12 CDISCP… 01-701… Day 1 … 2013-07-19 16:00:00 16h … 16 16 16 16
13 CDISCP… 01-701… Day 1 … 2013-07-20 00:00:00 24h … 24 24 24 24
14 CDISCP… 01-701… Day 2 … 2013-07-20 00:00:00 Dose 24 0 0 0
15 CDISCP… 01-701… Day 2 … 2013-07-20 00:00:00 Pre-… 24 0 0 0
16 CDISCP… 01-701… Day 2 … 2013-07-20 12:00:00 36h … 36 12 12 12
17 CDISCP… 01-701… Day 2 … 2013-07-21 00:00:00 48h … 48 24 24 24
18 CDISCP… 01-701… Day 3 … 2013-07-21 00:00:00 Dose 48 0 0 0
19 CDISCP… 01-701… Day 3 … 2013-07-21 00:00:00 Pre-… 48 0 0 0
# … with abbreviated variable name ¹BASETYPE
# A tibble: 19 × 12
USUBJID BASETYPE DTYPE AVISIT ATPT AVAL NFRLT NRRLT AFRLT ARRLT
<chr> <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 01-701-1028 Day 1 Bas… <NA> Day 1 Pre-… 0 0 0 -0.5 -0.5
2 01-701-1028 Day 1 Bas… <NA> Day 1 Dose 54 0 0 0 0
3 01-701-1028 Day 1 Bas… <NA> Day 1 5 Mi… 0.0957 0.08 0.08 0.0833 0.0833
4 01-701-1028 Day 1 Bas… <NA> Day 1 30 M… 0.522 0.5 0.5 0.5 0.5
5 01-701-1028 Day 1 Bas… <NA> Day 1 1h P… 0.895 1 1 1 1
6 01-701-1028 Day 1 Bas… <NA> Day 1 1.5h… 1.16 1.5 1.5 1.5 1.5
7 01-701-1028 Day 1 Bas… <NA> Day 1 2h P… 1.35 2 2 2 2
8 01-701-1028 Day 1 Bas… <NA> Day 1 4h P… 1.71 4 4 4 4
9 01-701-1028 Day 1 Bas… <NA> Day 1 6h P… 1.80 6 6 6 6
10 01-701-1028 Day 1 Bas… <NA> Day 1 8h P… 1.82 8 8 8 8
11 01-701-1028 Day 1 Bas… <NA> Day 1 12h … 0.571 12 12 12 12
12 01-701-1028 Day 1 Bas… <NA> Day 1 16h … 0.178 16 16 16 16
13 01-701-1028 Day 1 Bas… <NA> Day 2 24h … 0.0173 24 24 24 24
14 01-701-1028 Day 2 Bas… <NA> Day 2 Dose 54 24 0 24 0
15 01-701-1028 Day 2 Bas… COPY Day 2 Pre-… 0.0173 24 0 24 0
16 01-701-1028 Day 2 Bas… <NA> Day 2 36h … 0.005 36 12 36 12
17 01-701-1028 Day 2 Bas… <NA> Day 3 48h … 0.005 48 24 48 24
18 01-701-1028 Day 3 Bas… <NA> Day 3 Dose 54 48 0 48 0
19 01-701-1028 Day 3 Bas… COPY Day 3 Pre-… 0.005 48 0 48 0
# … with 2 more variables: BASE <dbl>, CHG <dbl>
ASEQ# ---- Add ASEQ ----
adpc <- adpc %>%
# Calculate ASEQ
derive_var_obs_number(
new_var = ASEQ,
by_vars = exprs(STUDYID, USUBJID),
order = exprs(ADTM, BASETYPE, EVID, AVISITN, ATPTN, DTYPE),
check_type = "error"
) %>%
# Remove temporary variables
select(
-DOMAIN, -PCSEQ, -starts_with("orig"), -starts_with("min"),
-starts_with("max"), -starts_with("EX"), -ends_with("next"),
-ends_with("prev"), -DRUG, -EVID, -AXRLT, -NXRLT
) %>%
# Derive PARAM and PARAMN
derive_vars_merged(dataset_add = select(param_lookup, -PCTESTCD), by_vars = exprs(PARAMCD))ASEQ Ouput# A tibble: 19 × 11
USUBJID BASET…¹ DTYPE AVISIT ATPT AVAL NFRLT NRRLT AFRLT ARRLT ASEQ
<chr> <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <int>
1 01-701-… Day 1 … <NA> Day 1 Pre-… 0 0 0 -0.5 -0.5 1
2 01-701-… Day 1 … <NA> Day 1 Dose 54 0 0 0 0 2
3 01-701-… Day 1 … <NA> Day 1 5 Mi… 0.0957 0.08 0.08 0.0833 0.0833 3
4 01-701-… Day 1 … <NA> Day 1 30 M… 0.522 0.5 0.5 0.5 0.5 4
5 01-701-… Day 1 … <NA> Day 1 1h P… 0.895 1 1 1 1 5
6 01-701-… Day 1 … <NA> Day 1 1.5h… 1.16 1.5 1.5 1.5 1.5 6
7 01-701-… Day 1 … <NA> Day 1 2h P… 1.35 2 2 2 2 7
8 01-701-… Day 1 … <NA> Day 1 4h P… 1.71 4 4 4 4 8
9 01-701-… Day 1 … <NA> Day 1 6h P… 1.80 6 6 6 6 9
10 01-701-… Day 1 … <NA> Day 1 8h P… 1.82 8 8 8 8 10
11 01-701-… Day 1 … <NA> Day 1 12h … 0.571 12 12 12 12 11
12 01-701-… Day 1 … <NA> Day 1 16h … 0.178 16 16 16 16 12
13 01-701-… Day 1 … <NA> Day 2 24h … 0.0173 24 24 24 24 13
14 01-701-… Day 2 … COPY Day 2 Pre-… 0.0173 24 0 24 0 14
15 01-701-… Day 2 … <NA> Day 2 Dose 54 24 0 24 0 15
16 01-701-… Day 2 … <NA> Day 2 36h … 0.005 36 12 36 12 16
17 01-701-… Day 2 … <NA> Day 3 48h … 0.005 48 24 48 24 17
18 01-701-… Day 3 … COPY Day 3 Pre-… 0.005 48 0 48 0 18
19 01-701-… Day 3 … <NA> Day 3 Dose 54 48 0 48 0 19
# … with abbreviated variable name ¹BASETYPE
VSHTBL and weight WTBLcompute_bmi()# Derive additional baselines from VS
adpc <- adpc %>%
derive_vars_merged(
dataset_add = vs,
filter_add = VSTESTCD == "HEIGHT",
by_vars = exprs(STUDYID, USUBJID),
new_vars = exprs(HTBL = VSSTRESN, HTBLU = VSSTRESU)
) %>%
derive_vars_merged(
dataset_add = vs,
filter_add = VSTESTCD == "WEIGHT" & VSBLFL == "Y",
by_vars = exprs(STUDYID, USUBJID),
new_vars = exprs(WTBL = VSSTRESN, WTBLU = VSSTRESU)
) %>%
mutate(
BMIBL = compute_bmi(height = HTBL, weight = WTBL),
BMIBLU = "kg/m^2"
)# A tibble: 19 × 10
USUBJID HTBL HTBLU WTBL WTBLU BMIBL BMIBLU BASETYPE ATPT AVAL
<chr> <dbl> <chr> <dbl> <chr> <dbl> <chr> <chr> <chr> <dbl>
1 01-701-1028 178. cm 99.3 kg 31.4 kg/m^2 Day 1 Baseline Pre-… 0
2 01-701-1028 178. cm 99.3 kg 31.4 kg/m^2 Day 1 Baseline Dose 54
3 01-701-1028 178. cm 99.3 kg 31.4 kg/m^2 Day 1 Baseline 5 Mi… 0.0957
4 01-701-1028 178. cm 99.3 kg 31.4 kg/m^2 Day 1 Baseline 30 M… 0.522
5 01-701-1028 178. cm 99.3 kg 31.4 kg/m^2 Day 1 Baseline 1h P… 0.895
6 01-701-1028 178. cm 99.3 kg 31.4 kg/m^2 Day 1 Baseline 1.5h… 1.16
7 01-701-1028 178. cm 99.3 kg 31.4 kg/m^2 Day 1 Baseline 2h P… 1.35
8 01-701-1028 178. cm 99.3 kg 31.4 kg/m^2 Day 1 Baseline 4h P… 1.71
9 01-701-1028 178. cm 99.3 kg 31.4 kg/m^2 Day 1 Baseline 6h P… 1.80
10 01-701-1028 178. cm 99.3 kg 31.4 kg/m^2 Day 1 Baseline 8h P… 1.82
11 01-701-1028 178. cm 99.3 kg 31.4 kg/m^2 Day 1 Baseline 12h … 0.571
12 01-701-1028 178. cm 99.3 kg 31.4 kg/m^2 Day 1 Baseline 16h … 0.178
13 01-701-1028 178. cm 99.3 kg 31.4 kg/m^2 Day 1 Baseline 24h … 0.0173
14 01-701-1028 178. cm 99.3 kg 31.4 kg/m^2 Day 2 Baseline Pre-… 0.0173
15 01-701-1028 178. cm 99.3 kg 31.4 kg/m^2 Day 2 Baseline Dose 54
16 01-701-1028 178. cm 99.3 kg 31.4 kg/m^2 Day 2 Baseline 36h … 0.005
17 01-701-1028 178. cm 99.3 kg 31.4 kg/m^2 Day 2 Baseline 48h … 0.005
18 01-701-1028 178. cm 99.3 kg 31.4 kg/m^2 Day 3 Baseline Pre-… 0.005
19 01-701-1028 178. cm 99.3 kg 31.4 kg/m^2 Day 3 Baseline Dose 54
ADSL variables| ADaM | Sample Code |
|---|---|
| ADPC | ad_adpc.R |
{admiral} Team